package util

import (
	"os"
	"sync"
)

type Messageloop struct {
	wg  sync.WaitGroup
	Ref RefCounter
}

func NewMessageloop(ref int) *Messageloop {
	messageloop := new(Messageloop)
	messageloop.wg.Add(ref)
	messageloop.Ref.Set(ref)
	return messageloop
}
func (p *Messageloop) Wait() {
	p.wg.Wait()
}
func (p *Messageloop) Signal() {

	p.Ref.Decrement()
	p.wg.Done()
}
func (p *Messageloop) Kill() {
	for loop := p.Ref.Get(); loop > 0; loop-- {
		p.wg.Done()
	}
}
func (p *Messageloop) Exit() {
	os.Exit(1)
}
